//对于axios进行二次封装
import axios from 'axios'
import nprogress from 'nprogress'
//引入进度条的样式
import 'nprogress/nprogress.css'
//start:进度条开始 done:进度条结束

//1:利用axios对象的方法create，去创建一个axios实例
//2:requests就是axios，只不过稍做配置一下
const requests = axios.create({
  //配置对象
  //基础路径,发请求URL携带api【发现:真实服务器接口都携带/api】
  baseURL: '/mock',
  //超时的设置
  timeout: 3000
})
//请求拦截器:将来项目中【N个请求】，只要发请求,会触发请求拦截器!!!
requests.interceptors.request.use(config => {
  //请求拦截器:请求头【header】,请求头能否给服务器携带参数
  //请求拦截器：其实项目中还有一个重要的作用,给服务器携带请求们的公共的参数
  //config:配置对象，对象里面有一个属性很重要，headers请求头

  //进度条开始动
  nprogress.start()
  return config
})
//响应拦截器：请求数据返回会执行
requests.interceptors.response.use(
  res => {
    //res:实质就是项目中发请求、服务器返回的数据

    //进度条结束
    nprogress.done()
    return res.data
  },
  err => {
    //温馨提示:某一天发请求,请求失败,请求失败的信息打印出来
    //终止Promise链
    return Promise.reject(new Error('failed'))
  }
)

//最后需要暴露:暴露的是添加新的功能的axios,即为requests
export default requests
